问题 #1
一位数据工程师正在处理两个表。这两个表的完整内容如下所示。

" target="_blank" rel="nofollow noopener">https://img.examtopics.com/certified-data-engineer-associate/image79.png">
该数据工程师运行以下查询将这两个表连接起来:

" target="_blank" rel="nofollow noopener">https://img.examtopics.com/certified-data-engineer-associate/image80.png">
上述查询将返回以下哪个结果?
- A.

" target="_blank" rel="nofollow noopener">https://img.examtopics.com/certified-data-engineer-associate/image81.png">
- B.

" target="_blank" rel="nofollow noopener">https://img.examtopics.com/certified-data-engineer-associate/image82.png">
- C.

" target="_blank" rel="nofollow noopener">https://img.examtopics.com/certified-data-engineer-associate/image83.png">
- D.

" target="_blank" rel="nofollow noopener">https://img.examtopics.com/certified-data-engineer-associate/image84.png">
答案: C
本题是All Certified Data Engineer Associate认证中SQL基础模块的经典考题,核心考察多表连接的语法和运算逻辑,首先明确本次查询使用的是左外连接(LEFT JOIN),左外连接的核心特性是完整保留左表的所有行,对于右表中满足连接条件的行进行匹配关联,若左表某行在右表中没有符合条件的匹配项,则对应的右表字段全部填充为NULL值。结合本题给出的两个测试表数据,左表共有3条有效记录,右表中与左表customer_id匹配的记录共3条,左表ID为1的记录匹配右表2条,ID为3的匹配右表1条,ID为2的无匹配,最终返回的结果集共4行,内容与选项C完全一致,因此选项C为正确答案。
各选项分析:
A. 该选项的结果仅包含左右表完全匹配的3条记录,未保留左表中无匹配的ID为2的记录,符合内连接(INNER JOIN)的运算结果,不符合本题使用的左连接规则,因此错误。
B. 该选项仅返回3条记录,对左表ID为1的匹配结果进行了错误去重,同时遗漏了左表无匹配的ID为2的记录,不符合左连接的运算逻辑,因此错误。
C. 该选项的结果完整保留了左表的所有3条记录,左表ID为1的行匹配右表2条记录全部保留,ID为2的行对应的右表字段填充为NULL,ID为3的行匹配右表1条记录,完全符合左外连接的运算规则,因此正确。
D. 该选项的结果同时保留了左右表的所有记录,包含右表中无左表匹配的行,符合全外连接(FULL OUTER JOIN)的运算结果,不符合本题左连接的逻辑,因此错误。
关键知识点:
1. SQL左外连接运算规则:左外连接会完整保留左表的所有记录,按照连接条件匹配右表记录,无匹配的右表字段填充NULL值,是数据工程师日常数据关联场景中最常用的连接类型之一,为认证核心考点。
2. SQL多连接类型的差异:需要清晰区分内连接、左外连接、右外连接、全外连接的适用场景和运算结果差异,能够根据业务需求选择正确的连接方式,是认证SQL模块的必考内容。
3. 多表连接结果校验规则:左连接的结果行数不小于左表的行数,若左表单行匹配右表多行则结果行数对应累加,该规则可用于快速验证连接结果的正确性,是数据工程师必备的基础技能。
参考资料:
Amazon Redshift 数据库开发人员指南 - JOIN 类型,
https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/r_JOIN_types.html
Google BigQuery 标准 SQL 查询语法 - 连接子句,
https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#join_clauses